# PDF

>[便携式文档格式（PDF）](https://en.wikipedia.org/wiki/PDF)，简称ISO 32000，是Adobe于1992年开发的文件格式，用于呈现文档，包括文字格式和图像，与应用软件，硬件和操作系统无关。

本篇介绍如何将`PDF`文档加载到我们后续使用的文档格式中。

## 使用PyPDF

使用`pypdf`将PDF加载到文档数组中，每个文档包含页面内容和具有`page`编号的元数据。


```bash
pip install pypdf
```


```python
from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("example_data/layout-parser-paper.pdf")
pages = loader.load_and_split()
```


```python
pages[0]
```

## 提取图像

使用`rapidocr-onnxruntime`包可以将图像提取为文本：


```bash
pip install rapidocr-onnxruntime
```


```python
loader = PyPDFLoader("https://arxiv.org/pdf/2103.15348.pdf", extract_images=True)
pages = loader.load()
pages[4].page_content
```

## 使用MathPix

受Daniel Gross的[https://gist.github.com/danielgross/3ab4104e14faccc12b49200843adab21](https://gist.github.com/danielgross/3ab4104e14faccc12b49200843adab21)的启发


```python
from langchain_community.document_loaders import MathpixPDFLoader
```


```python
loader = MathpixPDFLoader("example_data/layout-parser-paper.pdf")
```


```python
data = loader.load()
```

## 使用无结构化


```python
from langchain_community.document_loaders import UnstructuredPDFLoader
```


```python
loader = UnstructuredPDFLoader("example_data/layout-parser-paper.pdf")
```


```python
data = loader.load()
```

### 保留元素

底层，Unstructured为不同的文本块创建不同的“元素”。默认我们将它们组合在一起，但是您可以通过指定`mode="elements"`来保留此分隔。


```python
loader = UnstructuredPDFLoader("example_data/layout-parser-paper.pdf", mode="elements")
```


```python
data = loader.load()
```


```python
data[0]
```

### 获取远程PDF使用无结构化

这包括如何将在线PDF加载到我们可以在下游使用的文档格式中。这可用于各种在线PDF站点，如https://open.umn.edu/opentextbooks/textbooks/和https://arxiv.org/archive/。

请注意：所有其他PDF加载程序也可以用于获取远程PDF，但`OnlinePDFLoader`是一个遗留函数，专门与`UnstructuredPDFLoader`一起使用。


```python
from langchain_community.document_loaders import OnlinePDFLoader
```


```python
loader = OnlinePDFLoader("https://arxiv.org/pdf/2302.03803.pdf")
```


```python
data = loader.load()
```


```python
print(data)
```

### 使用MathPix

在`OpenAIEmbeddings`下我们想使用`OpenAI API Key`。


```python
import os
import getpass

os.environ['OPENAI_API_KEY'] = getpass.getpass('OpenAI API Key:')
```

### 使用Unstructured


```python
from langchain_community.document_loaders import OnlinePDFLoader
```


```python
loader = OnlinePDFLoader("https://arxiv.org/pdf/2302.03803.pdf")
```


```python
data = loader.load()
```



```python
with open("example_data/layout-parser-paper.pdf", "rb") as f:
    pdf = f.read()

pdf
```